package com.zhenyi.liuxue.mini;

import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.jfinal.kit.Kv;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.SqlPara;
import com.liuxue.common.model.LxMajor;
import com.liuxue.common.model.LxSchoolMajor;
import com.liuxue.common.model.LxUkSchool;
import com.liuxue.common.model.LxUser;
import com.utils.PathUtils;
import com.utils.image.UploadUtils;
import com.zhenyi.liuxue.core.ImportUtils;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

public class ApiController extends MiniController {

	public void upload() {
		File file = getFileParam("file");

		if (!file.exists()) {
			renderMsg("文件不存在");
			return;
		}
		String url = UploadUtils.upload(file);
		if (url != null) {
			renderResult(url);
		} else {
			renderFailure(500, "上传失败");
		}
	}

	public void importExcel() {
		ImportUtils utils = new ImportUtils();
		// utils.importCompanySchool();
		// utils.importMajors();
		renderSuccess();
	}

	public void infoMissingMajors() {
		List<LxSchoolMajor> list = LxSchoolMajor.dao.findAll();

		ArrayList<List<String>> arrayList = new ArrayList<>();
		List<String> title = CollUtil.newArrayList("录取标准专业名(EN)", "专业类型", "schoolId", "大学");
		arrayList.add(title);

		for (int i = 0; i < list.size(); i++) {
			LxSchoolMajor schoolMajor = list.get(i);
			LxUkSchool ukSchool = LxUkSchool.dao.findById(schoolMajor.getSchoolId());
			System.out.println(i + 1 + ". " + schoolMajor.getName() + " - " + ukSchool.getName());
			if (schoolMajor.getName().equals("null")) {
				System.out.println("major name is null, next");
				continue;
			}

			Kv kv = Kv.by("majorEngName", schoolMajor.getName());
			kv.set("schoolName", ukSchool.getName());
			SqlPara sqlPara = Db.use("liuxue").getSqlPara("LXFindMajorInfo", kv);
			LxMajor major = LxMajor.dao.findFirst(sqlPara);

			if (major == null) {
				String schoolMajorName = schoolMajor.getName();
				String majorType = ImportUtils.MAJOR_ARRAY[schoolMajor.getType()];
				String ukSchoolId = ukSchool.getId().toString();
				String ukSchoolName = ukSchool.getName();
				List<String> row = CollUtil.newArrayList(schoolMajorName, majorType, ukSchoolId, ukSchoolName);
				arrayList.add(row);
			}
		}
		String now = DateUtil.now();
		now = now.replace("-", "");
		now = now.replace(":", "");
		now = now.replace(" ", "");
		String name = "缺失专业信息-" + now + ".xlsx";
		String path = PathUtils.getFile("lx", "temp", "excel", name);
		ExcelWriter writer = ExcelUtil.getWriter(path);
		writer.write(arrayList);
		writer.close();
		File file = new File(path);
		renderFile(file);
	}

	public void doSomething() throws SQLException {
//		String path = "D:\\UserData\\Desktop\\顾问信息.xlsx";
//		ExcelReader reader = ExcelUtil.getReader(path);
//		List<List<Object>> list = reader.read();
//
//		List<LxUser> users = LxUser.dao.find("select * from lx_user where lx_user.id < ?", 4520);
//
//		for (int i = 0; i < users.size(); i++) {
//			LxUser user = users.get(i);
//			boolean exist = false;
//			for (int j = 0; j < list.size(); j++) {
//				if (j == 0) {
//					continue;
//				}
//				List<Object> row = list.get(j);
//				String uid = row.size() > 0 ? String.valueOf(row.get(0) == null ? "" : row.get(0)) : "";
//				String name = row.size() > 2 ? String.valueOf(row.get(2) == null ? "" : row.get(2)) : "";
//				String engName = row.size() > 3 ? String.valueOf(row.get(3) == null ? "" : row.get(3)) : "";
//				String account = row.size() > 4 ? String.valueOf(row.get(4) == null ? "" : row.get(4)) : "";
//
//				if (user.getId().equals(Long.valueOf(uid))) {
//					System.out.println(user.getId() + " - " + user.getName() + " - "
//							+ (StrKit.notBlank(user.getAccount()) ? user.getAccount() : user.getEmail()));
//					exist = true;
//					break;
//				}
//			}
//			if (!exist) {
//				user.setFlag(1);
//				user.update();
//			}
//			System.out.print(i * 100 / users.size() + "%\r");
//		}

		// String path = "D:\\UserData\\Desktop\\Untitled.xlsx";
		// ExcelReader reader = ExcelUtil.getReader(path);
		// List<List<Object>> list = reader.read();
		//
		// for (int i = 0; i < list.size(); i ++) {
		// if (i == 0) {
		// continue;
		// }
		// List<Object> row = list.get(i);
		// String uid = row.size() > 0 ? String.valueOf(row.get(0) == null ? "" :
		// row.get(0)) : "";
		// String name = row.size() > 1 ? String.valueOf(row.get(1) == null ? "" :
		// row.get(1)) : "";
		// String sex = row.size() > 2 ? String.valueOf(row.get(2) == null ? "" :
		// row.get(2)) : "";
		// String isSaveSex = row.size() > 3 ? String.valueOf(row.get(3) == null ? "" :
		// row.get(3)) : "";
		//
		// LxUser user = LxUser.dao.findById(uid);
		// if (user == null) {
		// System.out.println("user not found: uid=" + uid);
		// continue;
		// }
		// System.out.println(i * 100 / list.size() + "% - User.name:" + user.getName()
		// + " - excel:" + name);
		// if (isSaveSex.equals("1")) {
		// user.setSex(Integer.valueOf(sex));
		// } else {
		// user.setSex(null);
		// }
		// user.update();
		// }

		// String path = "D:\\UserData\\Desktop\\Untitled.xlsx";
		// ExcelReader reader = ExcelUtil.getReader(path);
		// List<List<Object>> list = reader.read();
		// for (int index = 0; index < list.size(); index++) {
		// if (index == 0) {
		// continue;
		// }
		// List<Object> row = list.get(index);
		// String id = row.size() > 0 ? String.valueOf(row.get(0) == null ? "" :
		// row.get(0)) : "";
		// String certId = row.size() > 1 ? String.valueOf(row.get(1) == null ? "" :
		// row.get(1)) : "";
		// String userId = row.size() > 2 ? String.valueOf(row.get(2) == null ? "" :
		// row.get(2)) : "";
		// String status = row.size() > 3 ? String.valueOf(row.get(3) == null ? "" :
		// row.get(3)) : "";
		// String createTime = row.size() > 4 ? String.valueOf(row.get(4) == null ? "" :
		// row.get(4)) : "";
		// String updateTime = row.size() > 4 ? String.valueOf(row.get(4) == null ? "" :
		// row.get(4)) : "";
		//
		// LxUserCertificate userCert = LxUserCertificate.dao.findById(certId, userId);
		// if (userCert == null) {
		// userCert = new LxUserCertificate();
		// userCert.setUserId(Long.valueOf(userId));
		// userCert.setCertificateId(Long.valueOf(certId));
		// userCert.setStatus(status.equals("1") ? 1 : 0);
		// if (!createTime.equals("0")) {
		// userCert.setAddTime(new DateTime(Long.valueOf(createTime) * 1000L));
		// } else {
		// userCert.setAddTime(new DateTime("2000-01-01 00:00:00", "yyyy-MM-dd
		// HH:mm:ss"));
		// }
		// userCert.save();
		// } else {
		// userCert.setStatus(status.equals("1") ? 1 : 0);
		// userCert.update();
		// }
		//
		// }
		// reader.close();

		// String cityJson = getPara("cityJson");
		// JSONArray cities = JSONUtil.parseArray(cityJson);
		// System.out.println(cities);
		//
		// List<HashMap> list = cities.toList(HashMap.class);
		//
		// Collections.sort(list, new Comparator<Map>() {
		// @Override
		// public int compare(Map o1, Map o2) {
		// return
		// toPinYin(o1.get("label").toString()).compareTo(toPinYin(o2.get("label").toString()));
		// }
		//
		// private String toPinYin(String str) {
		// StringBuilder sb = new StringBuilder();
		// String[] arr = null;
		//
		// for (int i = 0; i < str.length(); i++) {
		// arr = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i));
		// if (arr != null && arr.length > 0) {
		// if (str.charAt(i) == '重') {
		// sb.append(arr[1]);
		// } else {
		// sb.append(arr[0]);
		// }
		// }
		// }
		// return sb.toString();
		// }
		// });
		//
		// for (int i = 0; i < list.size(); i++) {
		// System.out.println(i + ": " + list.get(i).get("label") + " " +
		// toPinYin(list.get(i).get("label").toString()));
		//
		// List<Map<String, Object>> city = (List<Map<String, Object>>)
		// list.get(i).get("children");
		// Collections.sort(city, new Comparator<Map>() {
		// @Override
		// public int compare(Map o1, Map o2) {
		// return
		// toPinYin(o1.get("label").toString()).compareTo(toPinYin(o2.get("label").toString()));
		// }
		//
		// private String toPinYin(String str) {
		// StringBuilder sb = new StringBuilder();
		// String[] arr = null;
		//
		// for (int i = 0; i < str.length(); i++) {
		// arr = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i));
		// if (arr != null && arr.length > 0) {
		// if (str.charAt(i) == '重') {
		// sb.append(arr[1]);
		// } else {
		// sb.append(arr[0]);
		// }
		// }
		// }
		// return sb.toString();
		// }
		// });
		// System.out.println("=======");
		// for (int j = 0; j < city.size(); j ++) {
		// System.out.println(j + ": " + city.get(j).get("label") + " " +
		// toPinYin(city.get(j).get("label").toString()));
		// }
		// }
		//
		// System.out.println(JsonKit.toJson(list));

		renderSuccess();
	}

	// private String toPinYin(String str) {
	// StringBuilder sb = new StringBuilder();
	// String[] arr = null;
	//
	// for (int i = 0; i < str.length(); i++) {
	// arr = PinyinHelper.toHanyuPinyinStringArray(str.charAt(i));
	// if (arr != null && arr.length > 0) {
	// for (String string : arr) {
	// sb.append(string);
	// }
	// }
	// }
	// return sb.toString();
	// }

}
